/**
 * @Author: sinosoft
 * @Description:
 * @Date: Create in 14:57 2021/5/11
 * @Modified By:
 */
package com.whz.parameterized;

/*
* Set<Object> 是一个参数化类型 表示可以包含任何对象类型的一个集合
* Set<?> 是一个通配符类型 表示只能包含某种未知对象类型的一个集合
* Set 是一个原生态类型 它脱离了泛型系统
* */

/*
* 像E, List<E>和List<String>这样的类型应称为不可具体化的类型
* 不可具体化的类型是指其运行时表示法包含的信息比编译时表示法包含的信息更少的类型
* 唯一可具体化的参数化类型是无限制的通配符类型
* 创建无限制通配符类型数组是合法的
* */
/*
* 协变 如果Sub为Super的子类型 那么数组类型Sub[]就是Super[]的子类型
* 数组是协变且可以具体化的
* 泛型是不可变的且可以被擦除的
* 数组提供了运行时的类型安全 但没有编译时的类型安全
*
* */

/*
* 有限制通配符如<? extends E> 或 <? super E>
* 由于Collection<Object>不是Collection<Number>的子类型 仅仅依靠单一参数类型会严格限制输入参数
* 为了获取最大限度的灵活性 要在表示生产者或消费者的输入参数上使用通配符类型
* PECS表示 producer-extends consumer-super
* */